Django এর Authentication এবং Authorization

Web Development - জ্যাঙ্গো (Django)
286

Authentication এবং Authorization হল ওয়েব অ্যাপ্লিকেশনের দুইটি গুরুত্বপূর্ণ নিরাপত্তা ফিচার। যেখানে Authentication ব্যবহারকারীকে সনাক্ত করে এবং নিশ্চিত করে যে তিনি কে, Authorization নিশ্চিত করে যে ব্যবহারকারী কী করতে পারবে। Django এর নিজস্ব Authentication এবং Authorization সিস্টেম রয়েছে, যা ব্যবহার করে আপনি সুরক্ষিত অ্যাপ্লিকেশন তৈরি করতে পারেন।

এই টিউটোরিয়ালে আমরা Django এর Authentication এবং Authorization ব্যবস্থার উপর বিস্তারিত আলোচনা করব।


Django Authentication: ব্যবহারকারী সনাক্তকরণ

Django এর Authentication সিস্টেম ব্যবহারকারীকে লগইন এবং লগআউট করার প্রক্রিয়া সহজ করে। Django ইতোমধ্যে একটি শক্তিশালী ব্যবহারকারী মডেল প্রদান করে, যা ব্যবহারকারীর তথ্য যেমন ইউজারনেম, পাসওয়ার্ড, ইমেইল ইত্যাদি সংরক্ষণ করে।

১. ব্যবহারকারী মডেল এবং ডিফল্ট Authentication সিস্টেম

Django প্রজেক্টে User মডেলটি ডিফল্টভাবে django.contrib.auth অ্যাপ্লিকেশনের অন্তর্ভুক্ত থাকে। এর মধ্যে রয়েছে ইউজার নাম, পাসওয়ার্ড, ইমেইল, লগইন এবং গ্রুপ নির্ধারণের ফিচার।

ব্যবহারকারী তৈরি করা:

# views.py

from django.contrib.auth.models import User

def create_user(request):
    user = User.objects.create_user('john', 'john@example.com', 'password123')
    return HttpResponse(f"User {user.username} created!")

এখানে, create_user মেথডটি একটি নতুন ইউজার তৈরি করছে। create_user() মেথডটি পাসওয়ার্ড হ্যাশিংয়ের মাধ্যমে নিরাপদে পাসওয়ার্ড সংরক্ষণ করে।

২. ব্যবহারকারী লগইন এবং লগআউট

Django ইতোমধ্যে login() এবং logout() ফাংশন সরবরাহ করে যা ব্যবহারকারীকে লগইন এবং লগআউট করতে সাহায্য করে।

লগইন ফাংশন:

# views.py

from django.contrib.auth import login
from django.contrib.auth.models import User

def login_user(request):
    user = User.objects.get(username='john')
    login(request, user)
    return HttpResponse("User logged in successfully!")

লগআউট ফাংশন:

# views.py

from django.contrib.auth import logout

def logout_user(request):
    logout(request)
    return HttpResponse("User logged out successfully!")

৩. ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন

ব্যবহারকারী তাদের পাসওয়ার্ড পরিবর্তন করতে চাইলে Django এর set_password() মেথড ব্যবহার করা যায়।

# views.py

from django.contrib.auth.models import User

def change_password(request):
    user = User.objects.get(username='john')
    user.set_password('newpassword123')
    user.save()
    return HttpResponse("Password updated successfully!")

Django Authorization: অনুমতি এবং অ্যাক্সেস কন্ট্রোল

Authorization হল ব্যবহারকারীকে নির্দিষ্ট ডাটা এবং ফিচার অ্যাক্সেস করার অনুমতি দেওয়া। Django এর Permission সিস্টেম ব্যবহার করে আপনি নির্ধারণ করতে পারেন কোন ব্যবহারকারী কী কী করতে পারবে। Django এর Group এবং Permission মডেল গুলি আপনাকে ব্যবহারকারীদের বিভিন্ন রকমের অনুমতি দিতে সাহায্য করে।

১. Permissions (অনুমতি)

Django দিয়ে আপনি ব্যবহারকারীদের নির্দিষ্ট অ্যাক্সেস অনুমতি দিতে পারেন। যেমন, একটি ইউজার যদি কিছু ডাটা দেখতে না পারে বা সম্পাদনা না করতে পারে, আপনি সেটি নির্দিষ্ট করে দিতে পারেন।

ডিফল্ট Permissions:

Django স্বয়ংক্রিয়ভাবে কিছু permission তৈরি করে, যেমন:

  • add_modelname
  • change_modelname
  • delete_modelname
  • view_modelname

উদাহরণস্বরূপ, আপনি যদি ব্যবহারকারীকে কিছু ডাটাবেস অবজেক্ট দেখানোর অনুমতি দিতে চান, তাহলে আপনি view_modelname permission অ্যাসাইন করতে পারেন।

২. ব্যবহারকারীকে অনুমতি প্রদান

Permission অ্যাসাইন করার জন্য Django এর User মডেলের permissions ফিল্ড ব্যবহার করা হয়।

# views.py

from django.contrib.auth.models import User
from django.contrib.auth.models import Permission

def assign_permission(request):
    user = User.objects.get(username='john')
    permission = Permission.objects.get(codename='view_post')
    user.user_permissions.add(permission)
    return HttpResponse("Permission assigned to user successfully!")

এখানে, view_post permission টি john ইউজারের সাথে যুক্ত করা হয়েছে।

৩. Group তৈরি এবং ব্যবহার

আপনি যদি একই ধরনের অনুমতি একটি গ্রুপে দিতে চান, তবে Group মডেল ব্যবহার করতে পারেন। গ্রুপের মধ্যে একাধিক permission অ্যাসাইন করা যেতে পারে এবং সেই গ্রুপে যোগ করা ইউজারদের ওই permissions দেয়া হবে।

# views.py

from django.contrib.auth.models import Group

def create_group_and_assign_permission(request):
    # গ্রুপ তৈরি করা
    group = Group.objects.create(name='Editors')
    
    # permission যুক্ত করা
    permission = Permission.objects.get(codename='change_post')
    group.permissions.add(permission)
    
    # গ্রুপে ইউজার যোগ করা
    user = User.objects.get(username='john')
    user.groups.add(group)
    
    return HttpResponse("Group and permission assigned successfully!")

এখানে, আমরা একটি Editors গ্রুপ তৈরি করেছি এবং এর মধ্যে change_post permission অ্যাসাইন করেছি। তারপর john ইউজারকে এই গ্রুপে যোগ করেছি।

৪. ব্যবহারকারী অনুমতি চেক করা

Django এর user.has_perm() মেথড ব্যবহার করে আপনি চেক করতে পারেন যে, ব্যবহারকারী একটি নির্দিষ্ট permission পায় কিনা।

# views.py

def check_permission(request):
    user = request.user
    if user.has_perm('app_name.view_post'):
        return HttpResponse("You have permission to view the post!")
    else:
        return HttpResponse("You do not have permission to view the post.")

এখানে, has_perm মেথডটি চেক করবে যে, ব্যবহারকারী view_post permission পায় কিনা।


সারাংশ

Django এর Authentication এবং Authorization সিস্টেম ব্যবহার করে আপনি সহজে নিরাপদ এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন। Authentication ব্যবহারকারীদের সনাক্তকরণের জন্য ব্যবহৃত হয়, যেখানে Authorization ব্যবহৃত হয় তাদের বিভিন্ন ফিচারে অ্যাক্সেস কন্ট্রোল করার জন্য। Django এর ডিফল্ট User মডেল এবং Permission সিস্টেম আপনার অ্যাপ্লিকেশনকে নিরাপদ এবং কার্যকরী করতে সহায়তা করে।

Content added By

Django এর বিল্ট-ইন Authentication সিস্টেম

222

Django একটি শক্তিশালী বিল্ট-ইন authentication system প্রদান করে যা ইউজার সাইন-ইন, সাইন-আউট, রেজিস্ট্রেশন, পাসওয়ার্ড ম্যানেজমেন্ট এবং ইউজার পারমিশনসহ একাধিক নিরাপত্তা বৈশিষ্ট্য প্রদান করে। Django এর authentication সিস্টেম ব্যবহারের মাধ্যমে আপনি সহজেই ইউজারদের প্রমাণীকরণ (authentication) এবং অনুমোদন (authorization) পরিচালনা করতে পারবেন।

এটি django.contrib.auth অ্যাপ্লিকেশন দ্বারা পরিচালিত হয়, যা Django প্রজেক্টে ডিফল্টভাবে অন্তর্ভুক্ত থাকে।


Django Authentication সিস্টেমের প্রধান বৈশিষ্ট্যসমূহ

  1. User Model: Django একটি ডিফল্ট ইউজার মডেল (User model) প্রদান করে যা ইউজারের তথ্য (যেমন ইউজারনেম, পাসওয়ার্ড, ইমেইল, ইত্যাদি) সংরক্ষণ করে।
  2. Login/Logout: Django এর বিল্ট-ইন ভিউ এবং ফর্মস ব্যবহার করে ইউজার লগইন এবং লগআউট করা যায়।
  3. Password Management: Django পাসওয়ার্ডের নিরাপত্তা নিশ্চিত করতে শক্তিশালী পাসওয়ার্ড হ্যাশিং সিস্টেম এবং পাসওয়ার্ড পরিবর্তন ও রিসেট করার সুবিধা প্রদান করে।
  4. Permissions and Groups: Django ব্যবহারকারীদের নির্দিষ্ট পারমিশন প্রদান করে এবং ব্যবহারকারীদের গোষ্ঠীভুক্ত করতে সাহায্য করে।
  5. Authentication Views: Django স্বয়ংক্রিয়ভাবে লগইন, লগআউট, পাসওয়ার্ড পরিবর্তন এবং রিসেট করার জন্য প্রয়োজনীয় ভিউ প্রদান করে।

১. User Model

Django এর User মডেলটি ইউজারের প্রাথমিক তথ্য (যেমন ইউজারনেম, ইমেইল, পাসওয়ার্ড) ধারণ করে। আপনি এই ডিফল্ট মডেলটি ব্যবহার করতে পারেন অথবা যদি আপনার আরও কাস্টম ফিল্ড প্রয়োজন হয় তবে এটি এক্সটেন্ড (extend) করতে পারেন।

ডিফল্ট User মডেল

from django.contrib.auth.models import User

# Creating a user instance
user = User.objects.create_user('john', 'john@example.com', 'password123')

# Creating a superuser (admin user)
admin = User.objects.create_superuser('admin', 'admin@example.com', 'adminpassword')

এখানে create_user() একটি সাধারণ ইউজার তৈরি করে, আর create_superuser() অ্যাডমিন ইউজার তৈরি করে যার সুপার অ্যাডমিন পারমিশন থাকে।

কাস্টম ইউজার মডেল

যদি আপনার প্রয়োজনে অতিরিক্ত ফিল্ড যোগ করার প্রয়োজন হয়, তবে Django এ কাস্টম ইউজার মডেল তৈরি করা সম্ভব। এই ক্ষেত্রে, আপনি মডেলটি AbstractBaseUser এবং BaseUserManager এর উপর ভিত্তি করে তৈরি করতে পারেন।

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError('The Email field must be set')
        user = self.model(email=email, username=username)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password=None):
        user = self.create_user(email, username, password)
        user.is_admin = True
        user.save(using=self._db)
        return user

class CustomUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=30, unique=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    def __str__(self):
        return self.username

এই কাস্টম ইউজার মডেলটি ব্যবহার করতে, আপনার settings.py ফাইলে AUTH_USER_MODEL এর মাধ্যমে কাস্টম মডেলটি নির্দেশ করতে হবে:

AUTH_USER_MODEL = 'myapp.CustomUser'

২. Login এবং Logout

Django এর বিল্ট-ইন login এবং logout ভিউ ফাংশন ব্যবহার করে ইউজারের লগইন এবং লগআউট পরিচালনা করা যায়।

Login

from django.contrib.auth import authenticate, login

def user_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            return HttpResponse('Invalid login credentials')
    return render(request, 'login.html')

এখানে authenticate() ফাংশন ব্যবহার করে ইউজারের ক্রেডেনশিয়াল যাচাই করা হয়, এবং login() ফাংশন ব্যবহার করে ইউজারকে লগইন করা হয়।

Logout

from django.contrib.auth import logout

def user_logout(request):
    logout(request)
    return redirect('home')

এই কোডে logout() ফাংশনটি ব্যবহার করে ইউজারকে লগআউট করা হয়।


৩. Password Management

Django স্বয়ংক্রিয়ভাবে পাসওয়ার্ডের হ্যাশিং এবং পাসওয়ার্ড রিসেট করার সিস্টেম প্রদান করে।

Password Change

Django একটি ডিফল্ট ভিউ password_change প্রদান করে, যা ইউজারদের পাসওয়ার্ড পরিবর্তন করতে সাহায্য করে।

from django.contrib.auth import views as auth_views

urlpatterns = [
    path('password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
    path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
]

Password Reset

আপনি পাসওয়ার্ড রিসেট ফিচারটি ব্যবহার করে ইউজারদের তাদের পাসওয়ার্ড পুনরুদ্ধার করতে পারেন। Django স্বয়ংক্রিয়ভাবে পাসওয়ার্ড রিসেট করার জন্য একটি লিঙ্ক পাঠায় ইমেইল মারফত।

from django.contrib.auth import views as auth_views

urlpatterns = [
    path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

এখানে, বিভিন্ন ভিউ ফাংশন ইউজারের পাসওয়ার্ড রিসেট করার পুরো প্রক্রিয়া পরিচালনা করে।


৪. Permissions এবং Groups

Django এর permissions ব্যবহারের মাধ্যমে আপনি ইউজারদের বিভিন্ন রোল বা পারমিশন প্রদান করতে পারেন, যা তাদের কনটেন্ট অ্যাক্সেসের স্তর নির্ধারণ করে। এছাড়া Groups ব্যবহার করে আপনি একই পারমিশনসমূহ একাধিক ইউজারের মধ্যে ভাগ করতে পারেন।

Permissions উদাহরণ:

from django.contrib.auth.models import Permission

# Creating a custom permission
permission = Permission.objects.create(codename='can_view_reports', name='Can View Reports')
user.user_permissions.add(permission)

Groups উদাহরণ:

from django.contrib.auth.models import Group

# Creating a group
group = Group.objects.create(name='Managers')
group.permissions.add(permission)  # Add permissions to the group
user.groups.add(group)  # Assign the group to the user

এভাবে, আপনি ইউজারদের সঠিক পারমিশন এবং গ্রুপের মাধ্যমে অ্যাপ্লিকেশনটির নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল সহজে পরিচালনা করতে পারেন।


সারাংশ

Django এর বিল্ট-ইন authentication সিস্টেমটি ইউজার ম্যানেজমেন্ট এবং সিকিউরিটি ফিচারগুলির একটি সম্পূর্ণ সমাধান প্রদান করে, যেমন ইউজার লগইন, লগআউট, পাসওয়ার্ড রিসেট এবং ম্যানেজমেন্ট, পারমিশন এবং গ্রুপ কন্ট্রোল। এটি আপনাকে নিরাপদ এবং কাস্টমাইজড ইউজার ম্যানেজমেন্ট প্রদান করার জন্য একটি শক্তিশালী প্ল্যাটফর্ম সরবরাহ করে।

Content added By

User Model এবং Custom User Model তৈরি করা

201

Django তে User Model হল একটি প্রি-বিল্ট মডেল যা ইউজার সম্পর্কিত তথ্য (যেমন ইউজারের নাম, ইমেইল, পাসওয়ার্ড, ইত্যাদি) সংরক্ষণ করে। এটি Django এর অটোমেটিক ব্যবহারকারী সিস্টেমের অংশ হিসেবে কাজ করে এবং ইউজার অথেন্টিকেশন, অথোরাইজেশন ইত্যাদি পরিচালনা করতে সাহায্য করে। তবে অনেক সময় প্রজেক্টের বিশেষ প্রয়োজনের জন্য আমরা Custom User Model তৈরি করতে চাই, যাতে আমরা আমাদের প্রয়োজন অনুযায়ী অতিরিক্ত ফিল্ড যোগ করতে পারি বা পূর্বনির্ধারিত ফিল্ডগুলো পরিবর্তন করতে পারি।


Django এর Pre-built User Model

Django তে ইউজার ম্যানেজমেন্টের জন্য একটি বিল্ট-ইন User মডেল রয়েছে, যা django.contrib.auth অ্যাপের অংশ। এই মডেলটি ইমেইল, ইউজারনেম, পাসওয়ার্ড, ফার্স্ট নেম, লাস্ট নেম ইত্যাদি ফিল্ড ধারণ করে। এটি ব্যবহারকারী তৈরি, লগইন, এবং পাসওয়ার্ড হ্যান্ডলিং এর জন্য Django এর অটোমেটিক সিস্টেম ব্যবহার করতে সাহায্য করে।

from django.contrib.auth.models import User

# নতুন ইউজার তৈরি করা
user = User.objects.create_user('myusername', 'myemail@example.com', 'mypassword')

# ইউজার লগইন ইত্যাদি

Custom User Model তৈরি করা

যেহেতু Django এর প্রি-বিল্ট User মডেল কখনো কখনো আমাদের প্রয়োজন মেটাতে পারে না (যেমন অতিরিক্ত ফিল্ড যোগ করা বা ইউজার ইমেইলকে ইউনিক করে ফেলা), সেজন্য Django তে Custom User Model তৈরি করা হয়।

১. Custom User Model তৈরি করা

Custom User Model তৈরি করতে, প্রথমে AbstractBaseUser বা AbstractUser ক্লাস থেকে ইনহেরিট করা হয়। AbstractUser ব্যবহার করলে Django এর বিল্ট-ইন ইউজার ফিচারগুলি (যেমন পাসওয়ার্ড ম্যানেজমেন্ট, গ্রুপ, পারমিশন ইত্যাদি) অটোমেটিকভাবে পাওয়া যাবে।

AbstractBaseUser ব্যবহার করলে, আপনাকে সব কিছু কাস্টমাইজ করতে হবে, যেমন ইউজারনেম, পাসওয়ার্ড ইত্যাদি।

উদাহরণ: Custom User Model তৈরি করা
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    date_of_birth = models.DateField(null=True, blank=True)
    profile_picture = models.ImageField(upload_to='profile_pics/', null=True, blank=True)

এখানে:

  • CustomUser মডেলটি AbstractUser থেকে ইনহেরিট করেছে, ফলে এর মধ্যে ইউজার সম্পর্কিত সব বেসিক ফিচার থাকবে (যেমন username, password, email, first_name, last_name ইত্যাদি)।
  • date_of_birth: ইউজারের জন্ম তারিখ।
  • profile_picture: ইউজারের প্রোফাইল ছবি।

২. settings.py তে Custom User Model কনফিগার করা

Custom User Model তৈরি করার পর, আপনাকে এটি settings.py তে ডিফাইন করতে হবে। এটা নিশ্চিত করতে হবে যে Django আপনার কাস্টম ইউজার মডেলটি ব্যবহার করছে।

# settings.py

AUTH_USER_MODEL = 'myapp.CustomUser'  # আপনার কাস্টম ইউজার মডেলের পথ

এখানে myapp আপনার অ্যাপের নাম এবং CustomUser আপনার কাস্টম ইউজার মডেল।

৩. মাইগ্রেশন তৈরি করা

কাস্টম ইউজার মডেল তৈরি করার পর, আপনাকে প্রথমে মাইগ্রেশন ফাইল তৈরি করতে হবে এবং তারপর ডেটাবেসে পরিবর্তনগুলো বাস্তবায়ন করতে হবে।

python manage.py makemigrations
python manage.py migrate

৪. ইউজার ম্যানেজার তৈরি করা

কাস্টম ইউজার মডেল ব্যবহার করার সময়, আপনি যদি ইউজার ম্যানেজার (User Manager) তৈরি করতে চান, তাহলে আপনাকে ইউজার ম্যানেজমেন্ট সিস্টেমকে আরও কাস্টমাইজ করতে হবে। উদাহরণস্বরূপ, কাস্টম ইউজার তৈরি করা:

from django.contrib.auth.models import BaseUserManager

class CustomUserManager(BaseUserManager):
    def create_user(self, username, email, password=None, **extra_fields):
        if not email:
            raise ValueError('The Email field must be set')
        email = self.normalize_email(email)
        user = self.model(username=username, email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        return self.create_user(username, email, password, **extra_fields)

এখানে:

  • create_user: সাধারণ ইউজার তৈরি করার জন্য ব্যবহৃত হয়।
  • create_superuser: সুপারইউজার তৈরি করার জন্য ব্যবহৃত হয়, যেখানে is_staff এবং is_superuser ফিল্ডগুলো অটোমেটিকভাবে True করা হয়।

৫. Django Admin এ কাস্টম ইউজার মডেল রেজিস্টার করা

আপনি যদি Django Admin প্যানেলে কাস্টম ইউজার মডেল ব্যবহার করতে চান, তাহলে admin.py ফাইলে এটিকে রেজিস্টার করতে হবে।

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ['username', 'email', 'date_of_birth', 'is_staff']
    list_filter = ['is_staff', 'is_superuser', 'is_active']
    search_fields = ['username', 'email']
    ordering = ['username']

admin.site.register(CustomUser, CustomUserAdmin)

এখানে:

  • CustomUserAdmin Django এর প্রি-বিল্ট UserAdmin এর কাস্টম সংস্করণ।
  • list_display, list_filter, search_fields ইত্যাদি কাস্টমাইজ করে Django Admin প্যানেলে ইউজারের তথ্য প্রদর্শন করা হয়।

সারাংশ

  • Custom User Model তৈরি করলে আপনি ইউজার মডেলটিকে কাস্টমাইজ করতে পারেন, যেমন অতিরিক্ত ফিল্ড যোগ করা বা ইউজারের বেসিক ফিল্ডগুলোর পরিবর্তন করা।
  • Django এর প্রি-বিল্ট AbstractUser মডেল ব্যবহার করলে অনেক ফিচার স্বয়ংক্রিয়ভাবে পাওয়া যায়।
  • CustomUserManager ব্যবহার করে ইউজার ম্যানেজমেন্ট সিস্টেম কাস্টমাইজ করা যায়।
  • Django Admin এ কাস্টম ইউজার মডেল রেজিস্টার করে আপনি ইউজার ম্যানেজমেন্ট সহজভাবে করতে পারেন।

Django তে Custom User Model তৈরি করলে ভবিষ্যতে আপনার অ্যাপের প্রয়োজনীয়তা অনুযায়ী ইউজার মডেল আরো কাস্টমাইজ করা সম্ভব।

Content added By

Login, Logout, এবং Password Management

237

Django তে Login, Logout, এবং Password Management খুবই গুরুত্বপূর্ণ অংশ, বিশেষ করে যখন আপনি ব্যবহারকারীদের জন্য নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল ম্যানেজ করতে চান। Django এ প্রি-বিল্ট ফিচার রয়েছে যা সহজে এসব কার্যক্রম পরিচালনা করতে সাহায্য করে। এই ফিচারগুলো ব্যবহার করে আপনি নিরাপদ লগিন, লগআউট এবং পাসওয়ার্ড পরিবর্তন করতে পারবেন।


Login, Logout, এবং Password Management: Overview

Django-তে authentication এবং authorization এর জন্য বিল্ট-ইন সিস্টেম রয়েছে। এর মাধ্যমে আপনি ব্যবহারকারীদের লগিন, লগআউট, এবং পাসওয়ার্ড ম্যানেজমেন্ট সিস্টেম তৈরি করতে পারেন। এই সিস্টেমটি Django’s auth app এর অংশ হিসেবে কাজ করে।


Login in Django

Django তে লগিন করার জন্য LoginView ক্লাস ব্যবহার করা হয়। এটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করে এবং সফল হলে ব্যবহারকারীকে ড্যাশবোর্ড বা অন্য কোনো পেজে রিডাইরেক্ট করে।

১. LoginView ব্যবহার

Django তে লগিন করার জন্য একটি LoginView তৈরি করা খুবই সহজ। আপনি django.contrib.auth.views.LoginView ব্যবহার করতে পারেন। এই ভিউটি স্বয়ংক্রিয়ভাবে লগিন ফর্ম এবং প্রসেসিং এর কাজ করে।

URL কনফিগারেশন:

# urls.py
from django.urls import path
from django.contrib.auth.views import LoginView

urlpatterns = [
    path('login/', LoginView.as_view(), name='login'),
]

২. Custom Login Template

ডিফল্টভাবে Django একটি login.html টেমপ্লেট ফাইল ব্যবহার করে, তবে আপনি এটি কাস্টমাইজ করতে পারেন। এর জন্য, আপনাকে LOGIN_REDIRECT_URL সেট করতে হবে যাতে লগিন সফল হলে ব্যবহারকারী কোথায় রিডাইরেক্ট হবে।

# settings.py
LOGIN_REDIRECT_URL = '/'

আপনি কাস্টম টেমপ্লেট তৈরি করতে পারেন:

<!-- login.html -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
</form>

Logout in Django

ব্যবহারকারীকে লগ আউট করার জন্য Django তে LogoutView ক্লাস ব্যবহার করা হয়। এটি স্বয়ংক্রিয়ভাবে সেশন শেষ করে ব্যবহারকারীকে লগ আউট করে দেয়।

১. LogoutView ব্যবহার

# urls.py
from django.contrib.auth.views import LogoutView

urlpatterns = [
    path('logout/', LogoutView.as_view(), name='logout'),
]

এটি স্বয়ংক্রিয়ভাবে লগআউট করার পর ব্যবহারকারীকে লগআউট পেজে রিডাইরেক্ট করে।


Password Management

Django তে পাসওয়ার্ড ম্যানেজমেন্টের জন্য কিছু শক্তিশালী বিল্ট-ইন ফিচার রয়েছে। এটি ব্যবহারকারীদের পাসওয়ার্ড পরিবর্তন এবং রিসেট করার সুবিধা দেয়। আপনি Password Change এবং Password Reset এর জন্য দুটি ভিউ ব্যবহার করতে পারেন: PasswordChangeView এবং PasswordResetView

১. Password Change

ব্যবহারকারীদের পাসওয়ার্ড পরিবর্তন করতে Django এর PasswordChangeView ব্যবহার করা হয়। এটি স্বয়ংক্রিয়ভাবে পাসওয়ার্ড পরিবর্তন ফর্ম সরবরাহ করে এবং সফল হলে ব্যবহারকারীকে একটি নির্দিষ্ট পেজে রিডাইরেক্ট করে।

URL কনফিগারেশন:

# urls.py
from django.contrib.auth.views import PasswordChangeView, PasswordChangeDoneView

urlpatterns = [
    path('password_change/', PasswordChangeView.as_view(), name='password_change'),
    path('password_change/done/', PasswordChangeDoneView.as_view(), name='password_change_done'),
]

এখানে:

  • PasswordChangeView: ব্যবহারকারীকে পাসওয়ার্ড পরিবর্তনের ফর্ম দেখাবে।
  • PasswordChangeDoneView: পাসওয়ার্ড পরিবর্তন সফল হলে একটি কনফার্মেশন পেজ দেখাবে।

২. Password Reset

যদি ব্যবহারকারী তার পাসওয়ার্ড ভুলে যায়, তবে PasswordResetView ব্যবহার করে পাসওয়ার্ড রিসেট করার প্রক্রিয়া শুরু করা যায়। এটি একটি ফর্ম সরবরাহ করে যেখানে ব্যবহারকারী তার ইমেইল ঠিকানা প্রদান করতে পারে, এবং তারপর Django একটি পাসওয়ার্ড রিসেট লিংক তার ইমেইলে পাঠাবে।

URL কনফিগারেশন:

# urls.py
from django.contrib.auth.views import PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView

urlpatterns = [
    path('password_reset/', PasswordResetView.as_view(), name='password_reset'),
    path('password_reset/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('reset/done/', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

এখানে:

  • PasswordResetView: ইমেইল ইনপুট ফর্ম প্রদর্শন করে।
  • PasswordResetDoneView: পাসওয়ার্ড রিসেট লিংক পাঠানোর পর কনফার্মেশন পেজ দেখায়।
  • PasswordResetConfirmView: পাসওয়ার্ড রিসেট করার জন্য নতুন পাসওয়ার্ড সেট করার ফর্ম দেখায়।
  • PasswordResetCompleteView: পাসওয়ার্ড রিসেট সফল হলে একটি কনফার্মেশন পেজ প্রদর্শন করে।

৩. Custom Password Reset Email

আপনি Django এর PasswordResetView এর মাধ্যমে পাঠানো ইমেইল কাস্টমাইজ করতে পারেন। এর জন্য আপনাকে ইমেইল টেমপ্লেট তৈরি করতে হবে।

<!-- password_reset_email.html -->
{% block content %}
    <p>Hello {{ user.username }},</p>
    <p>You requested a password reset. Click the link below to reset your password:</p>
    <p><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">Reset your password</a></p>
{% endblock %}

এটি ইমেইল শরীরের কাস্টম টেমপ্লেট যা রিসেট লিংক অন্তর্ভুক্ত করবে।


Django-তে Login, Logout, এবং Password Management সেটআপ করা খুবই সহজ এবং নিরাপদ। Django এর বিল্ট-ইন ভিউ এবং টেমপ্লেট ব্যবহার করে আপনি দ্রুত নিরাপদ লগিন সিস্টেম এবং পাসওয়ার্ড ম্যানেজমেন্ট সিস্টেম তৈরি করতে পারেন। আপনি যদি কাস্টমাইজেশন চান, তাহলে Django আপনাকে সেই সুযোগও প্রদান করে, যাতে আপনি আপনার অ্যাপ্লিকেশন অনুযায়ী প্রয়োজনীয় পরিবর্তন করতে পারেন।

Content added By

Role-based Authorization এবং Permissions ব্যবস্থাপনা

222

Django-তে Role-based Authorization এবং Permissions ব্যবস্থাপনা ব্যবহার করে আপনি অ্যাপ্লিকেশনের মধ্যে বিভিন্ন ধরনের ব্যবহারকারীর অধিকার এবং অনুমতিগুলি নিয়ন্ত্রণ করতে পারেন। এতে বিভিন্ন ব্যবহারকারী গ্রুপ এবং তাদের নির্দিষ্ট কাজের অধিকার সংক্রান্ত কাস্টম নিয়ম তৈরি করা সহজ হয়। Django একটি শক্তিশালী Authentication এবং Authorization সিস্টেম প্রদান করে, যা আপনাকে বিভিন্ন ধরনের নিরাপত্তা নিশ্চিত করতে সাহায্য করে।


Django তে Role-based Authorization

Role-based Authorization এর মাধ্যমে আপনি ব্যবহারকারীদের বিভিন্ন "ভূমিকা" (Role) নির্ধারণ করতে পারেন, যেমন Admin, Manager, Editor, User ইত্যাদি। প্রতিটি ভূমিকার জন্য আপনি নির্দিষ্ট Permissions (অধিকার) সেট করতে পারেন, যা সেই ভূমিকার সদস্যদের নির্দিষ্ট কাজ বা অ্যাকশন করতে অনুমতি দেয়।

Django তে সাধারণত Groups ব্যবহার করে Role-based Authorization পরিচালিত হয়। একটি গ্রুপ তৈরি করা হয়, এবং সেই গ্রুপের জন্য নির্দিষ্ট permissions প্রদান করা হয়। ব্যবহারকারী সেই গ্রুপে যোগ দিলে, তারা ওই গ্রুপের সমস্ত permissions পেয়ে যায়।

১. Group তৈরি করা

Django Admin Panel বা Django shell ব্যবহার করে গ্রুপ তৈরি করা যায়। নিচে এর একটি উদাহরণ দেওয়া হলো:

from django.contrib.auth.models import Group

# Create a new group
group = Group.objects.create(name='Editors')

২. Permission নির্ধারণ করা

Django-তে Permissions তৈরি করা হয়, যা ডিফল্টভাবে প্রতিটি মডেল (Model) এর জন্য ব্যবহৃত হয়। আপনি মডেলের জন্য প্রয়োজনীয় permission নির্ধারণ করতে পারেন।

from django.contrib.auth.models import Permission

# Create a permission
permission = Permission.objects.create(
    codename='can_edit_posts',
    name='Can edit posts',
    content_type=my_content_type  # ContentType object refers to the model
)

৩. গ্রুপে Permission যুক্ত করা

একটি গ্রুপে permissions যুক্ত করার জন্য, আপনাকে ওই গ্রুপের permissions ফিল্ডে permissions যোগ করতে হবে:

group.permissions.add(permission)

এখন, ওই গ্রুপের সকল সদস্য can_edit_posts permission পাবে।

৪. ব্যবহারকারীকে গ্রুপে যুক্ত করা

যখন আপনি একটি গ্রুপ তৈরি করেন এবং তার সাথে permissions সংযুক্ত করেন, তখন ব্যবহারকারীকে ওই গ্রুপে যোগ করলে, তাদের কাছে সেই গ্রুপের সমস্ত permission থাকবে।

from django.contrib.auth.models import User

# Add user to the group
user = User.objects.get(username='john_doe')
user.groups.add(group)

এখন, john_doe ব্যবহারকারী Editors গ্রুপের সদস্য এবং তাদের কাছে can_edit_posts permission থাকবে।


Django Permissions ব্যবস্থাপনা

Django তে Permissions ব্যবস্থাপনা খুবই সহজ এবং শক্তিশালী। Django ডিফল্টভাবে তিনটি সাধারণ permission দেয়: add, change, এবং delete। আপনি অতিরিক্ত কাস্টম permission তৈরি করতে পারেন এবং সেগুলো ব্যবহারকারীদের জন্য নির্ধারণ করতে পারেন।

১. ডিফল্ট Permissions

Django মডেল তৈরির সময় ডিফল্টভাবে নিম্নলিখিত permission তৈরি হয়:

  • add_<model_name>
  • change_<model_name>
  • delete_<model_name>
  • view_<model_name> (Django 2.1 এর পর)

যেমন, যদি আপনার মডেলটি Post নামে হয়, তাহলে ডিফল্ট permissions হবে:

  • add_post
  • change_post
  • delete_post
  • view_post

২. কাস্টম Permission তৈরি করা

আপনি যদি কাস্টম permission তৈরি করতে চান, তাহলে মডেল এর Meta ক্লাসে permissions ফিল্ড ব্যবহার করতে হবে।

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    class Meta:
        permissions = [
            ("can_publish", "Can publish post"),
        ]

এখানে, can_publish নামের একটি কাস্টম permission তৈরি করা হয়েছে, যা ব্যবহারকারীদের পোস্ট পাবলিশ করার অনুমতি দেবে।

৩. Permission যাচাই করা

একটি নির্দিষ্ট permission যাচাই করতে, Django-র user.has_perm() মেথড ব্যবহার করা হয়। এটি চেক করে যে, ব্যবহারকারী নির্দিষ্ট permission পেয়েছে কিনা।

if request.user.has_perm('myapp.can_publish'):
    # Allow the user to publish the post
else:
    # Deny access

Django তে Role-based Authorization এবং Permission ব্যবস্থাপনা

Django তে Role-based Authorization এবং Permissions ব্যবস্থাপনার মাধ্যমে আপনি:

  • ব্যবহারকারীদের বিভিন্ন ভূমিকা (Roles) অ্যাসাইন করতে পারেন, যেমন Admin, Editor, Subscriber ইত্যাদি।
  • প্রতিটি ভূমিকার জন্য নির্দিষ্ট permissions নির্ধারণ করতে পারেন।
  • Groups ব্যবহার করে বিভিন্ন ধরনের ভূমিকা তৈরি এবং ব্যবস্থাপনা করতে পারেন।
  • কাস্টম permissions তৈরি করতে পারেন এবং সেগুলো ব্যবহারকারীদের জন্য নির্দিষ্ট করতে পারেন।
  • ভিউ ফাংশন বা ক্লাস ভিত্তিক ভিউ (Class-Based Views) এ permission_required ডেকোরেটর ব্যবহার করে নিরাপত্তা নিশ্চিত করতে পারেন।

এইভাবে Django আপনাকে ব্যবহারকারীর ভূমিকা এবং অনুমতিগুলি সুষ্ঠু এবং নিরাপদভাবে পরিচালনা করতে সহায়তা করে।


সারাংশ

Django তে Role-based Authorization এবং Permissions ব্যবস্থাপনার মাধ্যমে আপনি গ্রুপ, ভূমিকা, এবং কাস্টম অনুমতির মাধ্যমে ব্যবহারকারীদের অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। Groups এবং Permissions এর মাধ্যমে আপনি সহজেই ভূমিকা নির্ধারণ করতে পারেন এবং has_perm() মেথড দিয়ে অনুমতি যাচাই করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...